package com.ruoyi.common.core.domain.vo;

import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.common.annotation.AreaName;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.annotation.OssUrl;
import com.ruoyi.common.annotation.UserMemberInfo;
import com.ruoyi.common.convert.ExcelDictConvert;
import com.ruoyi.common.core.domain.model.UserBusinessInfo;
import com.ruoyi.common.enums.UserBusinessSubType;
import com.ruoyi.common.enums.UserBusinessType;
import lombok.Data;
import org.apache.commons.compress.utils.Lists;

import java.util.Arrays;
import java.util.Date;
import java.util.List;


/**
 * 人员信息视图对象 user_info
 *
 * @author strongme
 * @date 2023-04-24
 */
@Data
@ExcelIgnoreUnannotated
public class UserInfoVo implements UserBusinessInfo, RiskLevelAware {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @ExcelProperty(value = "主键")
    private Long id;

    /**
     * 头像
     */
    @ExcelProperty(value = "头像")
    private String avatar;

    @OssUrl
    public Object getAvatarDetail() {
        return avatar;
    }

    /**
     * 人员类型
     */
    @ExcelProperty(value = "人员类型")
    private String type;


    public UserBusinessSubType getSubType() {
        return UserBusinessSubType.getUserType(type, UserBusinessType.USER_DRUG);
    }

    /**
     * 所属地区
     */
    @ExcelProperty(value = "所属地区")
    private String area;

    @AreaName()
    public String getAreaName() {
        return this.area;
    }

    /**
     * 姓名
     */
    @ExcelProperty(value = "姓名")
    private String name;

    /**
     * 性别
     */
    @ExcelProperty(value = "性别")
    private String gender;

    /**
     * 民族
     */
    @ExcelProperty(value = "民族")
    private String mz;

    /**
     * 政治面貌
     */
    @ExcelProperty(value = "政治面貌")
    private String zzmm;

    /**
     * 身高
     */
    @ExcelProperty(value = "身高")
    private Long height;

    /**
     * 身份证号码
     */
    @ExcelProperty(value = "身份证号码")
    private String idno;

    /**
     * 出生日期
     */
    @ExcelProperty(value = "出生日期")
    private Date birthday;

    /**
     * 文化程度
     */
    @ExcelProperty(value = "文化程度")
    private String whcd;

    /**
     * 决定机关
     */
    @ExcelProperty(value = "决定机关")
    private String jdjg;

    /**
     * 决定时间
     */
    @ExcelProperty(value = "决定时间")
    private Date jdsj;

    /**
     * 负责人id
     */
    @ExcelProperty(value = "负责人id")
    private Long fzr;

    @UserMemberInfo
    public Object getFzrInfo() {
        return fzr;
    }

    /**
     * 户籍地派出所
     */
    @ExcelProperty(value = "户籍地派出所")
    private String hjdpcs;

    /**
     * 户籍地
     */
    @ExcelProperty(value = "户籍地")
    private String hjd;

    /**
     * 户籍地详址
     */
    @ExcelProperty(value = "户籍地详址")
    private String hjdxz;

    /**
     * 居住地派出所
     */
    @ExcelProperty(value = "居住地派出所")
    private String jzdpcs;

    /**
     * 居住地
     */
    @ExcelProperty(value = "居住地")
    private String jzd;

    /**
     * 居住地详址
     */
    @ExcelProperty(value = "居住地详址")
    private String jzdxz;

    /**
     * 就业情况
     */
    @ExcelProperty(value = "就业情况")
    private String jyqk;

    /**
     * 固定电话
     */
    @ExcelProperty(value = "固定电话")
    private String gddh;

    /**
     * 手机号码
     */
    @ExcelProperty(value = "手机号码")
    private String mobile;

    /**
     * 婚姻状况
     */
    @ExcelProperty(value = "婚姻状况")
    private String hyzk;

    /**
     * 目前状态
     */
    @ExcelProperty(value = "目前状态")
    private String mqzt;

    /**
     * 是否与父母居住
     */
    @ExcelProperty(value = "是否与父母居住")
    private String sfyfmzj;

    /**
     * 法律文书编号
     */
    @ExcelProperty(value = "法律文书编号")
    private String flwsbh;

    /**
     * 原始档案编号
     */
    @ExcelProperty(value = "原始档案编号")
    private String ysdabh;

    /**
     * 所属警务区
     */
    @ExcelProperty(value = "所属警务区")
    private String ssjwq;

    /**
     * 滥用毒品类型
     */
    @ExcelProperty(value = "滥用毒品类型")
    private String lydplx;

    public List<String> getLydplxList() {
        if (StrUtil.isNotBlank(lydplx)) {
            return Arrays.asList(lydplx.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 技能特长
     */
    @ExcelProperty(value = "技能特长")
    private String jntc;

    public List<String> getJntcList() {
        if (StrUtil.isNotBlank(jntc)) {
            return Arrays.asList(jntc.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 决定书
     */
    @ExcelProperty(value = "决定书")
    private String jds;

    /**
     * 风险等级
     */
    @ExcelProperty(value = "风险等级")
    private String fxdj;

    public List<String> getFxdjList() {
        if (StrUtil.isNotBlank(fxdj)) {
            return Arrays.asList(fxdj.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 入所日期
     */
    @ExcelProperty(value = "入所日期")
    private Date rsrq;

    /**
     * 出所日期
     */
    @ExcelProperty(value = "出所日期")
    private Date csrq;

    /**
     * 康复救助中心
     */
    @ExcelProperty(value = "康复救助中心")
    private Long kfjzzx;

    /**
     * 送至人员
     */
    @ExcelProperty(value = "送至人员")
    private String szry;

    /**
     * 送至单位
     */
    @ExcelProperty(value = "送至单位")
    private String szdw;

    /**
     * 戒毒期限起日期
     */
    @ExcelProperty(value = "戒毒期限起日期")
    private Date jdqxqrq;

    /**
     * 报到日期
     */
    @ExcelProperty(value = "报到日期")
    private Date bdrq;

    /**
     * 其他犯罪记录
     */
    @ExcelProperty(value = "其他犯罪记录")
    private String qtfzjl;

    /**
     * 指纹编号
     */
    @ExcelProperty(value = "指纹编号")
    private String zwbh;

    /**
     * dna编号
     */
    @ExcelProperty(value = "dna编号")
    private String dnabh;

    /**
     * 备注
     */
    @ExcelProperty(value = "备注")
    private String remark;

    /**
     * 帮扶计划
     */
    @ExcelProperty(value = "帮扶计划")
    private String helpPlan;

    /**
     * 人员期数类型
     */
    @ExcelProperty(value = "人员期数类型")
    private String termType;

    /**
     * 执行地区
     */
    @ExcelProperty(value = "执行地区")
    private String zxdq;

    /**
     * 执行单位详称
     */
    @ExcelProperty(value = "执行单位详称")
    private String zxdwxc;

    /**
     * 责令单位详称
     */
    @ExcelProperty(value = "责令单位详称")
    private String zldwxc;

    /**
     * 感染传染疾病
     */
    @ExcelProperty(value = "感染传染疾病")
    private String grcrjb;

    /**
     * 强戒出所日期
     */
    @ExcelProperty(value = "强戒出所日期")
    private Date qjcsrq;

    /**
     * 接受社区康复前所在的强制隔离场所
     */
    @ExcelProperty(value = "接受社区康复前所在的强制隔离场所")
    private String jssqkfqszdqzglcs;

    /**
     * 参加药物维持治疗门诊
     */
    @ExcelProperty(value = "参加药物维持治疗门诊")
    private String cjywwczlmz;

    /**
     * 是否进入康复场所
     */
    @ExcelProperty(value = "是否进入康复场所")
    private String sfjrkfcs;

    /**
     * 社区戒毒康复协议书
     */
    @ExcelProperty(value = "社区戒毒康复协议书")
    private String sqjdkfxys;

    /**
     * 社区戒毒康复责任书
     */
    @ExcelProperty(value = "社区戒毒康复责任书")
    private String sqjdkfzrs;

    /**
     * 月收入情况
     */
    @ExcelProperty(value = "月收入情况")
    private String ysrqk;

    /**
     * 身体状况
     */
    @ExcelProperty(value = "身体状况")
    private String stzk;

    /**
     * 违法犯罪情况
     */
    @ExcelProperty(value = "违法犯罪情况")
    private String wffzqk;

    /**
     * 当前状况
     */
    @ExcelProperty(value = "当前状况")
    private String dqzk;

    /**
     * 驾驶证是否吊销
     */
    @ExcelProperty(value = "驾驶证是否吊销")
    private String jszsfdx;

    /**
     * 交往吸毒人数
     */
    @ExcelProperty(value = "交往吸毒人数")
    private Long jwxdrs;

    /**
     * 车辆信息
     */
    @ExcelProperty(value = "车辆信息")
    private String clxx;

    /**
     * 社会保障情况
     */
    @ExcelProperty(value = "社会保障情况")
    private String shbzqk;

    public List<String> getShbzqkList() {
        if (StrUtil.isNotBlank(shbzqk)) {
            return Arrays.asList(shbzqk.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 就业帮助情况
     */
    @ExcelProperty(value = "就业帮助情况")
    private String jybzqk;

    public List<String> getJybzqkList() {
        if (StrUtil.isNotBlank(jybzqk)) {
            return Arrays.asList(jybzqk.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 家庭情况
     */
    @ExcelProperty(value = "家庭情况")
    private String jtqk;

    public List<String> getJtqkList() {
        if (StrUtil.isNotBlank(jtqk)) {
            return Arrays.asList(jtqk.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 身体状况附件：（包含医院出具的诊断报告、检查报告、残疾证等）
     */
    @ExcelProperty(value = "身体状况附件：", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "包=含医院出具的诊断报告、检查报告、残疾证等")
    private String stzkfj;

    /**
     * 初次吸毒时间
     */
    @ExcelProperty(value = "初次吸毒时间")
    private Date ccxdsj;

    /**
     * 初次吸毒被查获时间
     */
    @ExcelProperty(value = "初次吸毒被查获时间")
    private Date ccxdbchsj;

    /**
     * 前科情况
     */
    @ExcelProperty(value = "前科情况")
    private String qkqk;

    /**
     * 最后一次吸毒被拘留/戒毒开始时间
     */
    @ExcelProperty(value = "最后一次吸毒被拘留/戒毒开始时间")
    private Date zhycxdbjljdkssj;

    /**
     * 最后一次吸毒被拘留/戒毒结束时间
     */
    @ExcelProperty(value = "最后一次吸毒被拘留/戒毒结束时间")
    private Date zhycxdbjljdjssj;

    /**
     * 是否与他人在一起吸毒
     */
    @ExcelProperty(value = "是否与他人在一起吸毒")
    private String sfytrzyqxd;

    /**
     * 累计戒毒次数
     */
    @ExcelProperty(value = "累计戒毒次数")
    private Long ljjdcs;

    /**
     * 累计戒毒时间
     */
    @ExcelProperty(value = "累计戒毒时间")
    private String ljjdsj;

    /**
     * 周均吸毒次数
     */
    @ExcelProperty(value = "周均吸毒次数")
    private String zjxdcs;

    /**
     * 吸毒后的自我感觉（对自身）
     */
    @ExcelProperty(value = "吸毒后的自我感觉", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "对=自身")
    private String xdhdzwgjdzs;

    /**
     * 吸毒后的自我感觉（对家庭）
     */
    @ExcelProperty(value = "吸毒后的自我感觉", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "对=家庭")
    private String xdhdzwgjdjt;

    /**
     * 吸毒后的自我感觉（对社会）
     */
    @ExcelProperty(value = "吸毒后的自我感觉", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "对=社会")
    private String xdhdzwgjdsh;

    /**
     * 吸毒方式
     */
    @ExcelProperty(value = "吸毒方式")
    private String xdfs;

    public List<String> getXdfsList() {
        if (StrUtil.isNotBlank(xdfs)) {
            return Arrays.asList(xdfs.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 毒品来源
     */
    @ExcelProperty(value = "毒品来源")
    private String dply;

    public List<String> getDplyList() {
        if (StrUtil.isNotBlank(dply)) {
            return Arrays.asList(dply.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 吸毒场所
     */
    @ExcelProperty(value = "吸毒场所")
    private String xdcs;

    public List<String> getXdcsList() {
        if (StrUtil.isNotBlank(xdcs)) {
            return Arrays.asList(xdcs.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 吸毒氛围
     */
    @ExcelProperty(value = "吸毒氛围")
    private String xdfw;

    public List<String> getXdfwList() {
        if (StrUtil.isNotBlank(xdfw)) {
            return Arrays.asList(xdfw.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 初次吸毒原因
     */
    @ExcelProperty(value = "初次吸毒原因")
    private String ccxdyy;

    public List<String> getCcxdyyList() {
        if (StrUtil.isNotBlank(ccxdyy)) {
            return Arrays.asList(ccxdyy.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 吸毒资金来源
     */
    @ExcelProperty(value = "吸毒资金来源")
    private String xdzjly;

    public List<String> getXdzjlyList() {
        if (StrUtil.isNotBlank(xdzjly)) {
            return Arrays.asList(xdzjly.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 戒毒后产生负面情绪原因
     */
    @ExcelProperty(value = "戒毒后产生负面情绪原因")
    private String jdhcsfmqxyy;

    public List<String> getJdhcsfmqxyyList() {
        if (StrUtil.isNotBlank(jdhcsfmqxyy)) {
            return Arrays.asList(jdhcsfmqxyy.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 复吸毒品原因（心理因素）
     */
    @ExcelProperty(value = "复吸毒品原因", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "心=理因素")
    private String fxdpyyxlys;

    public List<String> getFxdpyyxlysList() {
        if (StrUtil.isNotBlank(fxdpyyxlys)) {
            return Arrays.asList(fxdpyyxlys.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 复吸毒品原因（身体因素）
     */
    @ExcelProperty(value = "复吸毒品原因", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "身=体因素")
    private String fxdpyystys;

    public List<String> getFxdpyystysList() {
        if (StrUtil.isNotBlank(fxdpyystys)) {
            return Arrays.asList(fxdpyystys.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 复吸毒品原因（社会环境因素）
     */
    @ExcelProperty(value = "复吸毒品原因", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "社=会环境因素")
    private String fxdpyyshhjys;

    public List<String> getFxdpyyshhjysList() {
        if (StrUtil.isNotBlank(fxdpyyshhjys)) {
            return Arrays.asList(fxdpyyshhjys.split(","));
        }
        return Lists.newArrayList();
    }

    /**
     * 填表人
     */
    @ExcelProperty(value = "填表人")
    private String tbr;

    /**
     * 填表时间
     */
    @ExcelProperty(value = "填表时间")
    private Date tbsj;

    /**
     * 填表单位
     */
    @ExcelProperty(value = "填表单位")
    private String tbdw;

    /**
     * 审核人
     */
    @ExcelProperty(value = "审核人")
    private String shenheren;

    /**
     * 审核时间
     */
    @ExcelProperty(value = "审核时间")
    private Date shsj;

    /**
     * 审核单位
     */
    @ExcelProperty(value = "审核单位")
    private String shdw;

    /**
     * 联系电话
     */
    @ExcelProperty(value = "联系电话")
    private String lxdh;

    /**
     * 社区戒毒社区康复人员签字时间（档案）
     */
    @ExcelProperty(value = "社区戒毒社区康复人员签字时间", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "档=案")
    private Date sqjdsqkfryqzsj;

    /**
     * 社区戒毒社区康复工作小组成员签字时间（档案）
     */
    @ExcelProperty(value = "社区戒毒社区康复工作小组成员签字时间", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "档=案")
    private Date sqjdsqkfgzxzcyqzsj;

    /**
     * 社区戒毒社区康复工作站负责人签字时间（档案）
     */
    @ExcelProperty(value = "社区戒毒社区康复工作站负责人签字时间", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "档=案")
    private Date sqjdsqkfgzzfzrqzsj;

    /**
     * 执行时间
     */
    @ExcelProperty(value = "执行时间")
    private Date zxsj;

    /**
     * 违法行为报告
     */
    @ExcelProperty(value = "违法行为报告")
    private String wfxwbg;

    /**
     * 是否脱失脱管
     */
    private String tstg;

    /**
     * 期满解除文书
     */
    @ExcelProperty(value = "期满解除文书")
    private String qmjcws;

    /**
     * 中止文书
     */
    private String zzws;

    /**
     * 终止原因
     */
    private String zzyy;

    /**
     * 终止日期
     */
    private Date zzrq;

    /**
     * 登记时间
     */
    private Date djsj;

    @Override
    public UserBusinessType getBusinessType() {
        return UserBusinessType.USER_DRUG;
    }

    @Override
    public UserBusinessSubType getBusinessSubType() {
        return getSubType();
    }

    @Override
    public Date getKeyDate() {
        return jdsj;
    }

    /**
     * 家访日期
     */
    private Date jfrq;

}
